package com.example.test.comutil;

public class ArrayUtls {
    /**
     * 判断一个数最接近数组中的某个数
     * @param number   有序数组
     * @param start     开始
     * @param end       结束
     * @param k         需要判断的值
     * @return          返回的数组下标
     */
    public static int find(float[] number, Integer start, Integer end, float k){
        //如果只剩一个 直接返回
        if (start == end){
            return end;
        }
        //如果只剩两个  返回最小的那个
        if (Math.abs(start-end) == 1){
            float startN = number[start];
            float endN = number[end];
            float startSub = Math.abs(startN- k);
            float endSub = Math.abs(endN - k);
            return startSub < endSub ? start : end;
        }
        int midle = (start + end)/2;
        float left =number[midle-1];
        float right = number[midle+1];
        float rightSub = Math.abs(right- k);
        float leftSub = Math.abs(left - k);

        //如果左边差值 比 右边差值 小 递归左半部分
        if (leftSub < rightSub){
            return find(number, start, midle - 1, k);
        }
        //如果右边差值 比 左边差值 小 递归右半部分
        if (rightSub < leftSub){
            return find(number, midle + 1, end, k);
        }
        //如果数组中的值 没有重复的 这个情况不可能发生
        return 1;
    }

    /**
     * 判断数组是否包含指定数字
     * @param data
     * @param value
     * @return
     */
    public static boolean containsValue(String[]data ,int value) {
        for (String str : data) {
            if (str.equals(""+value)) {
                return true;
            }
        }
        return false;
    }
}
